const jwt = require('express-jwt');
const jwtSign = require('jsonwebtoken').sign;
const jwtVerify = require('jsonwebtoken').verify;
const axios = require('axios');
const FormData = require('form-data');
const path = require('path');
const fs = require('fs');

// 配置日志文件路径
const LOG_DIR = path.join(__dirname, 'api_logs');
const LOG_FILE = path.join(LOG_DIR, 'signcallback.log');

   
module.exports = function (app, response) {

    // 签署合同
    app.get('/fyx/sign', (req, res) => {
        res.json({ code: 200, data: {
            'msg': 'sign123'
        } });
    });

    // 合同在签署过程中，若发生签署、拒绝签署、撤回、退回等事件时，契约锁会回调通知对接方系统。
    // 签署合同-回调
    app.all('/fyx/signcallback', (req, res) => {
        // 确保日志目录存在
        if (!fs.existsSync(LOG_DIR)) {
            fs.mkdirSync(LOG_DIR, { recursive: true });
        }

        // 获取完整请求数据
        const requestData = {
            headers: req.headers,
            body: req.body,
            query: req.query,
            ip: req.ip,
            timestamp: new Date().toISOString()
        };

        // 构造日志条目
        const logEntry = JSON.stringify({
            timestamp: new Date().toISOString(),
            request: {
            method: req.method,
            url: req.originalUrl,
            query: req.query,
            ip: req.ip,
            body: req.body,
            headers: req.headers,
            },
            response: requestData
        }) + '\n';

        // 异步写入日志文件（追加模式）
        fs.appendFile(LOG_FILE, logEntry, (err) => {
            if (err) {
            console.error('日志写入失败:', err);
            // 可以在此添加错误上报
            }
        });


        res.json({ code: 200, data: {
            'msg': 'signcallback'
        }});
    });


    // 接口2：读取日志内容
    app.get('/fyx/signlogs', (req, res) => {
    
        fs.readFile(LOG_FILE, 'utf8', (err, data) => {
        if (err) {
            if (err.code === 'ENOENT') {
            return res.status(404).json({
                code: 404,
                message: '日志文件不存在'
            });
            }
            return res.status(500).json({
            code: 500,
            message: '服务器内部错误'
            });
        }
    
        // 分页处理
        const allLogs = data.trim()
        .split('\n') // 按行分割
        .filter(line => line.trim()) // 过滤空行
        .map(line => {
            try {
            // 解析JSON并添加处理日期
            const log = JSON.parse(line);
            return {
                timestamp: new Date(log.timestamp),
                method: log.request?.method?.toUpperCase() || 'UNKNOWN',
                path: log.request?.url || '',
                status: log.response?.code || 0,
                clientIP: log.request?.ip || '',
                headers: log?.request?.headers || '',
                query: log?.request?.query || '',
                body: log?.request?.body || '',
                // rawData: log // 保留原始数据
            };
            } catch (e) {
            console.error('日志解析失败:', e.message, '原始内容:', line);
            return null;
            }
        });
    
        res.json({
            code: 200,
            data: {
            logs: allLogs
            }
        });
        });
    });

    // 错误处理中间件（处理其他可能的错误）
 // 错误处理中间件（处理JWT验证失败的情况）
    app.use((err, req, res, next) => {
        console.log('err.name', err.name)
        if (err.name === 'UnauthorizedError') {
           res.status(401).json({ message: 'Invalid or expired token' });
        } else {
           next(err);
        }
    });
}